#include <iostream>
#include <string.h>
using namespace std;

class ID
{
    void setDate(int start = 6);
    void setSex(int start = 16);
    bool isYoung() const;
    int getAge() const;
public:
    bool set_ID(char* s); // 用参数s初始化成员id（需申请动态内存），并将year, month, date初始化为0
    void fun(); // 根据身份证号计算持证人的出生年月和性别，并判断其是否为青年，并将获得的信息存储到对应的数据成员中
    void print() const; // 输出持证人的信息
    ~ID() // 析构函数，进行必要的操作
    {
        free(_id);
        _id = nullptr;
    }

private:
    char* _id; // 保存18位身份证号
    int _year = 0;
    int _month = 0;
    int _day = 0; // y, m, d分别表示持证人的出生年、月、日
    char _sex; // 持证人的性别（”M”或”F”） M代表男性，F代表女性
};

bool ID::set_ID(char* s)
{
    if (strlen(s) != 18) return false;
    _id = (char*)malloc(sizeof(char) * 18);
    strcpy(_id, s);
    _year = _month = _day = 0;
    return true;
}

void ID::fun()
{
    setDate();
    setSex();
}

void ID::setDate(int start)
{
    int i = start;
    while (i < start + 4) _year = _year * 10 + _id[i++] - '0';
    while (i < start + 6) _month = _month * 10 + _id[i++] - '0';
    while (i < start + 8) _day = _day * 10 + _id[i++] - '0';
}

void ID::setSex(int start)
{
    int i = start;
    _sex = (_id[i] - '0') % 2 ? 'M' : 'F';
}

void ID::print() const
{
    printf("%s\n%d.%d.%d\n", _id, _year, _month, _day);
    cout << _sex << endl;
    if (isYoung()) cout << 'Y' << endl;
    else cout << 'N' << endl;
}

bool ID::isYoung() const
{
    return _sex == 'M' ? getAge() < 35 : getAge() < 40;
}

int ID::getAge() const
{
    int ret = 2015 - _year;
    if (_month >= 10) --ret;
    return ret;
}

// 要求使用以下main函数测试：
int main()
{
    int T, i;
    char id[19];

    cin >> T;
    ID* person = new ID[T];

    for (i = 0; i < T; i++)
    {
        if (i > 0 && i < T) cout << endl;
        cin >> id;
        person[i].set_ID(id);
        person[i].fun();
        person[i].print();
    }

    return 0;
}
